#include <type_traits>
#include <iostream>

// 定义两种不同的类型，用于表示不同的存储或处理策略
struct SmallType {
    int data[2]; // 较小的数据容量
    void info() { std::cout << "Using SmallType\n"; }
};

struct LargeType {
    int data[100]; // 较大的数据容量
    void info() { std::cout << "Using LargeType\n"; }
};

// 使用 std::conditional 根据类型 T 的大小选择合适的类型
template<typename T>
using SmallOrLarge = typename std::conditional<sizeof(T) < sizeof(void*), SmallType, LargeType>::type;

int main() {
    // 实例化模板，基于 int 类型的大小选择合适的类型
    SmallOrLarge<int> a;
    a.info();  // 显示使用的是哪种类型

    // 实例化模板，基于 double 类型的大小选择合适的类型
    SmallOrLarge<double> b;
    b.info();  // 显示使用的是哪种类型
}